package mysql

import (
	"crypto/md5"
	"encoding/hex"
	"errors"
	"gorm.io/gorm"
	"web_app/modules"
)

const secret = "fanyulong.com"

func InsertUser(user *modules.User) error {

	result := GormDB.Create(&user)

	if result.Error != nil {
		return result.Error
	}

	if result.RowsAffected > 0 {
		return nil
	} else {
		return ErrorInsertUser
	}
}
func QueryUserByUsername(username string) error {
	var user modules.User
	user.Username = username
	result := GormDB.Where("Username = ?", user.Username).First(&user)

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 用户不存在，就返回nil说明没发生错误
			return nil
		}
		// 其他数据库错误
		return result.Error
	}

	// 如果没有任何错误，那么user就已经被成功地填充了，然后就返回nil
	return ErrorUserExist
}

func encryptPassword(oPassword string) string {
	h := md5.New()
	h.Write([]byte(secret))
	return hex.EncodeToString(h.Sum([]byte(oPassword)))
}

func Login(user *modules.User) (error, *modules.User) {
	var resultUser modules.User
	result := GormDB.Where("username = ?", user.Username).First(&resultUser)
	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 用户不存在，就返回nil说明没发生错误
			return ErrorUserNotExist, nil
		}
		// 其他数据库错误
		return result.Error, nil
	}

	if user.Password != resultUser.Password {
		return ErrorPassword, nil
	}

	return nil, &resultUser

}

func FindUserById(authorId int64) (string, error) {
	user := modules.User{}
	result := GormDB.Select("username").Where("user_id=?", authorId).First(&user)

	if result.Error != nil {
		return "", result.Error
	}

	if errors.Is(result.Error, gorm.ErrRecordNotFound) {
		return "", ErrorDataNotExist
	}

	return user.Username, nil
}
